package br.com.sguc.manegedBean;

import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import br.com.sguc.entidade.Campeonato;
import br.com.sguc.entidade.Equipe;
import br.com.sguc.entidade.Modalidade;
import br.com.sguc.entidade.Partida;
import br.com.sguc.entidade.Usuario;
import br.com.sguc.interfaces.CampeonatoRemote;
import br.com.sguc.interfaces.EquipeRemote;
import br.com.sguc.interfaces.ModalidadeRemote;

@ManagedBean(name = "campeonatoBean")
@ViewScoped
public class CampeonatoBean implements Serializable {

	private static final long serialVersionUID = 1L;

	@EJB
	CampeonatoRemote campeonatoBean;
	
	@EJB
	ModalidadeRemote modalidadeBean;
	
	@EJB
	EquipeRemote equipeRemote;
	
	@ManagedProperty("#{campeonatos}")
	private List<Campeonato> campeonatos;
	@ManagedProperty("#{campeonatoView}")
	private Campeonato campeonatoView;
	@ManagedProperty("#{campeonato}")
	private Campeonato campeonato;
	@ManagedProperty("#{campeonatoPesquisa}")
	private Campeonato campeonatoPesquisa;
	@ManagedProperty("#{pontos}")
	private Boolean pontos;
	@ManagedProperty("#{eliminacao}")
	private Boolean eliminacao;
	@ManagedProperty("#{modalidades}")
	private List<Modalidade> modalidades;
	@ManagedProperty("#{usuario}")
	private Usuario usuario;
	@ManagedProperty("#{idModalidade}")
	private Integer idModalidade;
	@ManagedProperty("#{logado}")
	private Boolean logado;
	
	/**
	 * Contrutor
	 */
			
	public CampeonatoBean() {

		if (!FacesContext.getCurrentInstance().getExternalContext().getSessionMap().isEmpty()) {
			usuario = (Usuario) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("user");
			campeonatoView = (Campeonato) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("camper");

			FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("camper");
		}
		if(campeonatoView == null){
			campeonatoView = new Campeonato();
		}
		
		System.out.println(usuario);
		
		logado = usuario == null? false : true;
			
	}

	/**
	 * Methods
	 * @throws IOException 
	 */
	
	public String alteraCampeonato(){
		
		campeonatoBean.atualizarCampeonato(campeonato);
		return "/campeonato/pesquisar_campeonato";
		
	}
	
	
	
	public void pesquisarCampeonato() {
		this.campeonatoPesquisa.setUsuarioOrganizador((Usuario) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("user"));
		this.campeonatos = campeonatoBean.pesquisarCampeonato(campeonatoPesquisa);
		this.usuario = (Usuario) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("user");
	}

	public String paginaCadastrar(){
		
//		modalidades = modalidadeBean.listarModalidades();
//		itens = new ArrayList<>();
//		for (Modalidade modalidade : modalidades) {
//			itens.add(new SelectItem(modalidade.getModalidade()));
//		}
//		
//		FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("modalidades", itens);
//		
		return "/campeonato/cadastrar_campeonato";
	}
	
	public String cadastrarCampeonato() {
		
		
		campeonato.setModal(modalidadeBean.getModalidades(idModalidade));

		if(campeonato.getTipoCampeonato().equals("1")){
			campeonato.setTipoPontuacao("3-1-0");
		}
		else {
			campeonato.setTipoPontuacao("1-0");
		}
		campeonato.setStatus("1");
		campeonato.setUsuarioOrganizador((Usuario) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("user"));
		campeonatoBean.salvarCampeonato(campeonato);
		FacesContext.getCurrentInstance().addMessage(null,new FacesMessage(FacesMessage.SEVERITY_INFO,"Campeonato Inserido Com Sucesso", ""));
		return "/campeonato/pesquisar_campeonato";
	}

	public String cancelar() {
		return "/campeonato/pesquisar_campeonato";
	}

	public String cadastrar() {
		return "/campeonato/cadastrar_campeonato";
	}

	
	public String redirecionar() {
		
		FacesContext fc = FacesContext.getCurrentInstance();
		HttpSession session = (HttpSession) fc.getExternalContext().getSession(
				false);
		session.invalidate();
		
		return "index.jsf";
	}
	
	public void visualizarCampeonato(){
		
		List<Integer> ids = new ArrayList<>();
		List<Equipe> equipes = new ArrayList<>();
		try {
			if(campeonato.getStatus().equals("2")){
				
				
				for (Partida partida : campeonato.getPartida()) {
					if(partida.getRodada().equals(1)){
						
						if(ids.isEmpty()){
							
							ids.add(partida.getEquipe1());
							ids.add(partida.getEquipe2());
						}else{
							if(!ids.contains(partida.getEquipe1())){
								ids.add(partida.getEquipe1());
							}
							if(!ids.contains(partida.getEquipe2())){
								ids.add(partida.getEquipe2());
							}
						}
					}
				}
					equipes= equipeRemote.findByIds(ids);
					campeonato.setEquipe(equipes);
			}
			
			FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("camper", campeonato);
			FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add("page");
			usuario = (Usuario) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("user");
			
			if(usuario == null){
				FacesContext.getCurrentInstance().getExternalContext().redirect("/SGUCWeb/campeonato/view_campeonato_inicial.jsf");
			}else {
				FacesContext.getCurrentInstance().getExternalContext().redirect("/SGUCWeb/campeonato/view_campeonato.jsf");
			}
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
		}
	}
	
	/**
	 *Getters and Setters 
	 */
	
	public List<Campeonato> getCampeonatos() {
		return campeonatos;
	}

	public void setCampeonatos(List<Campeonato> campeonatos) {
		this.campeonatos = campeonatos;
	}

	public Campeonato getCampeonato() {
		if (campeonato == null) {
			this.campeonato = new Campeonato();
		}
		return campeonato;
	}

	public void setCampeonato(Campeonato campeonato) {
		this.campeonato = campeonato;
	}

	public Campeonato getCampeonatoPesquisa() {
		if (campeonatoPesquisa == null) {
			this.campeonatoPesquisa = new Campeonato();
		}
		return campeonatoPesquisa;
	}

	public void setCampeonatoPesquisa(Campeonato campeonatoPesquisa) {
		this.campeonatoPesquisa = campeonatoPesquisa;
	}

	public Boolean getPontos() {
		return pontos;
	}

	public void setPontos(Boolean pontos) {
		this.pontos = pontos;
	}

	public Boolean getEliminacao() {
		return eliminacao;
	}

	public void setEliminacao(Boolean eliminacao) {
		this.eliminacao = eliminacao;
	}

	public List<Modalidade> getModalidades() {
		return modalidades;
	}

	public void setModalidades(List<Modalidade> modalidades) {
		this.modalidades = modalidades;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public Integer getIdModalidade() {
		return idModalidade;
	}

	public void setIdModalidade(Integer idModalidade) {
		this.idModalidade = idModalidade;
	}

	public Boolean getLogado() {
		return logado;
	}

	public void setLogado(Boolean logado) {
		this.logado = logado;
	}

	public Campeonato getCampeonatoView() {
		return campeonatoView;
	}

	public void setCampeonatoView(Campeonato campeonatoView) {
		this.campeonatoView = campeonatoView;
	}
	
}
